// Copyright 2011-2012 Paulo Augusto Peccin. See licence.txt distributed with this file. package org.javatari.pc.screen; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.io.File; import java.io.FilePermission; import java.util.List; import org.javatari.atari.cartridge.Cartridge; import org.javatari.pc.cartridge.ROMLoader; public final class ROMTransferHandlerUtil { public static boolean canAccept(Transferable transf) { // General URLs if (transf.isDataFlavorSupported(DATA_FLAVOR_TEXT)) return true; // Files if (!transf.isDataFlavorSupported(DATA_FLAVOR_FILE_LIST)) return false; try { // Files Permission new FilePermission(".", "read").checkGuard("Ignored"); return true; } catch (SecurityException ex) { return false; } } public static Cartridge importCartridgeData(Transferable transf) { // First try String URL String url = getSingleURL(transf); if (url != null) return ROMLoader.load(url, false); // Then try File File file = getSingleFile(transf); if (file != null) return ROMLoader.load(file); // Give up return null; } private static String getSingleURL(Transferable transf) { if (!transf.isDataFlavorSupported(DATA_FLAVOR_TEXT)) return null; try { String data = (String) transf.getTransferData(DATA_FLAVOR_TEXT); data = data.trim(); if (!data.isEmpty()) return data; } catch (Exception ex) { // Ignore } return null; } private static File getSingleFile(Transferable transf) { if (!transf.isDataFlavorSupported(DATA_FLAVOR_FILE_LIST)) return null; try { @SuppressWarnings("unchecked") List<File> data = (List<File>) transf.getTransferData(DATA_FLAVOR_FILE_LIST); if (data.isEmpty()) return null; return data.get(0); } catch (Exception ex) { // Ignore } return null; } private static DataFlavor DATA_FLAVOR_TEXT; private static DataFlavor DATA_FLAVOR_FILE_LIST; static { try { DATA_FLAVOR_TEXT = new DataFlavor("text/plain; class=java.lang.String"); DATA_FLAVOR_FILE_LIST = new DataFlavor("application/x-java-file-list; class=java.util.List"); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } } }